// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_BASE_IME_CHROMEOS_INPUT_METHOD_DESCRIPTOR_H_
#define UI_BASE_IME_CHROMEOS_INPUT_METHOD_DESCRIPTOR_H_

#include <string>
#include <vector>

#include "ui/base/ime/ui_base_ime_export.h"
#include "url/gurl.h"

namespace chromeos {
namespace input_method {

    // A structure which represents an input method.
    class UI_BASE_IME_EXPORT InputMethodDescriptor {
    public:
        InputMethodDescriptor();
        InputMethodDescriptor(const std::string& id,
            const std::string& name,
            const std::string& indicator,
            const std::vector<std::string>& keyboard_layouts,
            const std::vector<std::string>& language_codes,
            bool is_login_keyboard,
            const GURL& options_page_url,
            const GURL& input_view_url);
        ~InputMethodDescriptor();

        // Accessors
        const std::string& id() const { return id_; }
        const std::string& name() const { return name_; }
        const std::string& indicator() const { return indicator_; }
        const std::vector<std::string>& language_codes() const
        {
            return language_codes_;
        }
        const GURL& options_page_url() const { return options_page_url_; }
        const GURL& input_view_url() const { return input_view_url_; }
        const std::vector<std::string>& keyboard_layouts() const
        {
            return keyboard_layouts_;
        }

        bool is_login_keyboard() const { return is_login_keyboard_; }

        // Returns preferred keyboard layout.
        std::string GetPreferredKeyboardLayout() const;

        // Returns the indicator text of this input method.
        std::string GetIndicator() const;

    private:
        // An ID that identifies an input method engine (e.g., "t:latn-post",
        // "pinyin", "hangul").
        std::string id_;

        // A name used to specify the user-visible name of this input method.  It is
        // only used by extension IMEs, and should be blank for internal IMEs.
        std::string name_;

        // A preferred physical keyboard layout for the input method (e.g., "us",
        // "us(dvorak)", "jp"). Comma separated layout names do NOT appear.
        std::vector<std::string> keyboard_layouts_;

        // Language code like "ko", "ja", "en-US", and "zh-CN".
        std::vector<std::string> language_codes_;

        // A short indicator string that is displayed when the input method
        // is selected, like "US".
        std::string indicator_;

        // True if this input method can be used on login screen.
        bool is_login_keyboard_;

        // Options page URL e.g.
        // "chrome-extension://ceaajjmckiakobniehbjpdcidfpohlin/options.html".
        // This field is valid only for input method extension.
        GURL options_page_url_;

        // Input View URL e.g.
        // "chrome-extension://ceaajjmckiakobniehbjpdcidfpohlin/my_input_view.html".
        // This field is valid only for input method extension.
        GURL input_view_url_;
    };

    typedef std::vector<InputMethodDescriptor> InputMethodDescriptors;

} // namespace input_method
} // namespace chromeos

#endif // UI_BASE_IME_CHROMEOS_INPUT_METHOD_DESCRIPTOR_H_
